/**
 * AI 统一调用辅助函数
 * 集中管理所有AI调用逻辑，使用配置的AI服务和提示词
 */

import { callAI, getProviders, getCurrentProvider, getCurrentModel, type ChatMessage, type AIProvider, type AIModel } from './ai-config';

/**
 * 生成邮件AI总结
 * @param emailSubject 邮件主题
 * @param emailSender 发件人
 * @param emailContent 邮件内容
 * @param promptTemplate 提示词模板（支持变量替换）
 * @returns AI生成的总结内容
 */
export async function generateEmailSummary(
  emailSubject: string,
  emailSender: string,
  emailContent: string,
  promptTemplate: string
): Promise<string> {
  const providers = getProviders();
  const currentProvider = getCurrentProvider(providers);
  const currentModel = getCurrentModel(providers);
  
  if (!currentProvider || !currentModel) {
    throw new Error('请先在设置中配置AI服务（阿里云百炼、DeepSeek或Ollama）');
  }
  
  // 替换提示词模板中的变量
  const prompt = promptTemplate
    .replace(/{subject}/g, emailSubject)
    .replace(/{sender}/g, emailSender)
    .replace(/{content}/g, emailContent);
  
  const messages: ChatMessage[] = [{
    id: '1',
    role: 'user',
    content: prompt,
    timestamp: Date.now()
  }];
  
  return await callAI(currentProvider, currentModel, messages, {
    temperature: 0.3,
    maxTokens: 1000,
    topP: 0.9,
    stream: false
  });
}

/**
 * 检查AI服务是否已配置
 * @returns 是否已配置可用的AI服务
 */
export function isAIConfigured(): boolean {
  const providers = getProviders();
  const currentProvider = getCurrentProvider(providers);
  const currentModel = getCurrentModel(providers);
  
  return !!(currentProvider && currentModel);
}

/**
 * 获取当前配置的AI服务信息
 * @returns AI服务和模型信息，如未配置则返回null
 */
export function getCurrentAIInfo(): { provider: AIProvider; model: AIModel } | null {
  const providers = getProviders();
  const currentProvider = getCurrentProvider(providers);
  const currentModel = getCurrentModel(providers);
  
  if (!currentProvider || !currentModel) {
    return null;
  }
  
  return {
    provider: currentProvider,
    model: currentModel
  };
}

/**
 * 验证提示词模板的有效性
 * @param template 提示词模板
 * @param requiredVars 必需的变量列表
 * @returns 是否有效
 */
export function validatePromptTemplate(template: string, requiredVars: string[]): boolean {
  if (!template || template.trim().length === 0) {
    return false;
  }
  
  // 检查是否包含所有必需的变量
  for (const varName of requiredVars) {
    const pattern = `{${varName}}`;
    if (!template.includes(pattern)) {
      return false;
    }
  }
  
  return true;
}

